package cn.iocoder.yudao.module.lowcode.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * Groovy脚本配置属性
 * 
 * @author 芋道源码
 */
@Data
@Component
@ConfigurationProperties(prefix = "yudao.lowcode.groovy-script")
public class GroovyScriptProperties {

    /**
     * 是否启用Groovy脚本模块
     */
    private Boolean enabled = true;

    /**
     * 是否在启动时预加载脚本
     */
    private Boolean preloadOnStartup = true;

    /**
     * 预加载失败是否阻塞启动
     */
    private Boolean failFastOnPreload = false;

    /**
     * 脚本执行超时时间（秒）
     */
    private Integer executionTimeoutSeconds = 30;

    /**
     * 最大错误重试次数
     */
    private Integer maxErrorRetries = 3;

    /**
     * 错误脚本跳过时间（分钟）
     */
    private Integer errorScriptSkipMinutes = 10;

    /**
     * 是否启用脚本安全检查
     */
    private Boolean securityCheckEnabled = true;

    /**
     * 缓存配置
     */
    private CacheConfig cache = new CacheConfig();

    @Data
    public static class CacheConfig {
        /**
         * 类缓存最大数量
         */
        private Integer classMaxSize = 500;
        
        /**
         * 类缓存过期时间（分钟）
         */
        private Integer classExpireMinutes = 30;
        
        /**
         * 实例缓存最大数量
         */
        private Integer instanceMaxSize = 100;
        
        /**
         * 实例缓存过期时间（分钟）
         */
        private Integer instanceExpireMinutes = 10;
        
        /**
         * 错误缓存最大数量
         */
        private Integer errorMaxSize = 200;
        
        /**
         * 错误缓存过期时间（分钟）
         */
        private Integer errorExpireMinutes = 60;
    }
}